/**
 * Created by sjg on 17/9/25.
 */
var common = require('../../common');
var pool = require('../index');
var mysql = require('mysql');
var ItbBaseModel = require('./ItbBaseModel');


// Schema 结构
var ItbTmplSetModel = function(obj){
    ItbBaseModel.call(this,obj);

    // 以下为表定义数据，需要的字段就填入
    //`ts_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '模版组id',
    //`title` varchar(50) NOT NULL DEFAULT '' COMMENT '编组名称',
    //`desc` varchar(200) DEFAULT '' COMMENT '用途简介',
    //`use` int(3) NOT NULL DEFAULT '0' COMMENT '用途: 1~99:通用; 101~199:app用; 201~299:网页端用; 301~399:微信小程序用...',
    //`thumb` text COMMENT '图示',
    //`order` int(3) NOT NULL DEFAULT '999' COMMENT '显示顺序',
    //`start_time` datetime DEFAULT NULL COMMENT '有效开始日期',
    //`end_time` datetime DEFAULT NULL COMMENT '有效截止日期',
    //`publish` int(1) NOT NULL DEFAULT '0' COMMENT '1发布, 0未发布',
    //`create_time` datetime NOT NULL,
    //`update_time` datetime NOT NULL,
    //`update_by` varchar(50) NOT NULL DEFAULT '',
    //`del_flg` int(1) NOT NULL DEFAULT '0',
};
ItbTmplSetModel.prototype = new ItbBaseModel();

// 取得表名
ItbTmplSetModel.prototype.getTableName = function(){
    return 'itb_tmpl_set';
};
// 取得查询语句中where 后面匹配主键的条件（需要各派生类进行重载）
ItbTmplSetModel.prototype.getWhereConditionOfKeyEqual = function(){
    return 'ts_id='+this.ts_id;
};
//--------------------------------------- 获取模板集合列表相关 ----------------------------------------
/**
 * 获取指定时间的, 指定类型的模板集合列表的 sql 语句
 *
 * @param bForCnt true/false 是否是用于获取数量
 * @param timeString 合法的日期表达式 如: 2017-09-25 11:43:00
 * @param use 集合的使用类型 1~99:通用; 101~199:app用; 201~299:网页端用; 301~399:微信小程序用...
 * @param pageNum 请求页码, 从0开始, 如请求个数, 则此处传递 null
 * @param pageSize 请求页容量, 如请求个数, 则此处传递 null
 *
 * @return sql 对应的 sql 语句
 * */
function sql_getTmplSetListWithTimeAndUse(bForCnt, timeString, use,pageNum, pageSize) {
    var sql = '';
    sql += bForCnt ? ' SELECT COUNT(*) as count ' : ' SELECT * ';
    sql +=
        " FROM itb_tmpl_set ts " +
        " WHERE ts.del_flg=0 " +
        "   AND ts.publish=1 " +
        "   AND ts.use= " + use +
        //"   AND date('"+timeString+"') BETWEEN ts.start_time AND ts.end_time " +
        "   AND str_to_date('"+timeString+"','%Y-%m-%d %H:%i:%S') BETWEEN ts.start_time AND ts.end_time "+
        " ORDER BY ts.ORDER ";
    if(!bForCnt && Number(pageSize||0)>0) {
        var skipCnt = Number(pageNum||0)*Number(pageSize||0);
        sql += ' LIMIT ' + skipCnt + ',' + pageSize;
    }
    return sql;
}

/**
 * 获取指定时间的, 指定类型的模板集合列表
 *
 * @param timeString 合法的日期表达式 如: 2017-09-25 11:43:00
 * @param use 集合的使用类型 1~99:通用; 101~199:app用; 201~299:网页端用; 301~399:微信小程序用...
 * @param pageNum 请求页码
 * @param pageSize 请求页容量
 * @param callback 回调
 *          error: 请求失败原因
 *          list: [] sql行数组
 * */
ItbTmplSetModel.prototype.getTmplSetListWithTimeAndUse = function(timeString, use,pageNum, pageSize, callback) {
    pool.pool.getConnection(function(getConnectErr, connection) {
        if (getConnectErr) {
            console.log('ItbTmplSetModel.getTmplSetListWithTimeAndUse Err: '+getConnectErr);
            return callback(getConnectErr, null);
        }
        var sql = sql_getTmplSetListWithTimeAndUse(false, timeString, use, pageNum, pageSize);
        console.log(sql);
        connection.query(sql, function (error, results) {
            connection.release();
            if(error){
                console.log('ItbTmplSetModel.getTmplSetListWithTimeAndUse Err: ' + error);
                return callback(error,null);
            }
            return callback(null, results);
        });
    });
};

/**
 * 获取指定时间的, 指定类型的模板集合列表
 *
 * @param timeString 合法的日期表达式 如: 2017-09-25 11:43:00
 * @param use 集合的使用类型 1~99:通用; 101~199:app用; 201~299:网页端用; 301~399:微信小程序用...
 * @param callback 回调
 *          error: 请求失败原因
 *          count: 数量
 * */
ItbTmplSetModel.prototype.getTmplSetListWithTimeAndUseCnt = function(timeString, use, callback) {
    pool.pool.getConnection(function (getConnectErr, connection) {
        if (getConnectErr) {
            console.log('ItbTmplSetModel.getTmplSetListWithTimeAndUse Err: ' + getConnectErr);
            return callback(getConnectErr, null);
        }
        var sql = sql_getTmplSetListWithTimeAndUse(true, timeString, use, null, null);

        console.log(sql);
        connection.query(sql, function (error, results) {
            connection.release();
            if (error || !results || results.length < 1) {
                error = error ? error : '查询失败';
                console.log('ItbTmplSetModel.getTmplSetListWithTimeAndUseCnt Err: ' + error);
                return callback(error, null);
            }
            return callback(null, results[0].count);
        });
    });
};

//---------------------------------- 获取模板集合内的模板列表 -----------------------------------
/**
 * 根据模板集合 ID 获取该集合内的模板列表的查询 sql
 *
 * @param bForCnt true/false 是否用于获取数量
 * @param tsId 模板集合唯一标识
 * @param pageNum 页码
 * @param pageSize 页容量
 * @return sql 对应的 sql 语句
 *
 * */
function sql_getTmplListByTmplSetId(bForCnt, tsId, pageNum, pageSize) {
    var sql = '';
    sql += bForCnt ? ' SELECT COUNT(*) as count ' : ' SELECT * ';
    sql += ' FROM ( ' +
        '         (SELECT dd.design_id AS designId, ' +
        '                 tt.top_parent AS typeL, ' +
        '                 dp.thumb AS thumb, ' +
        '                 ts.width AS w, ' +
        '                 ts.height AS h, ' +
        '                 tsr.order ' +
        '          FROM itb_tmpl_set_r tsr, ' +
        '               tg_design_doc dd, ' +
        '               tg_type tt, ' +
        '               tg_design_page dp, ' +
        '               tg_size ts ' +
        '          WHERE tsr.ts_id =  ' + tsId +
        '            AND tsr.del_flg = 0 ' +
        '            AND tsr.type_id != 3 ' +
        '            AND dd.design_id = tsr.tmpl_id ' +
        '            AND dd.publish = 1 ' +
        '            AND dd.del_flg = 0 ' +
        '            AND tt.type_id = dd.type_id ' +
        '            AND tt.del_flg = 0 ' +
        '            AND tt.top_parent != 3 ' +
        '            AND dp.del_flg = 0 ' +
        '            AND dp.page_index = 0 ' +
        '            AND dp.design_id = dd.design_id ' +
        '            AND ts.del_flg=0 ' +
        '            AND ts.size_id = dd.size_id) ' +
        '       UNION ALL ' +
        '         (SELECT tmpl.tmpl_id AS designId, ' +
        '                 tsr.type_id AS typeL, ' +
        '                 tp.thumb_s AS thumb, ' +
        '                 1600 AS w, ' +
        '                 900 AS h, ' +
        '                 tsr.order ' +
        '          FROM itb_tmpl_set_r tsr, ' +
        '               itb_template tmpl, ' +
        '               itb_tmpl_page tp ' +
        '          WHERE tsr.ts_id =  ' + tsId +
        '            AND tsr.del_flg = 0 ' +
        '            AND tsr.type_id = 3 ' +
        '            AND tmpl.tmpl_id = tsr.tmpl_id ' +
        '            AND tmpl.publish = 1 ' +
        '            AND tp.del_flg = 0 ' +
        '            AND tp.tmpl_id = tmpl.tmpl_id ' +
        '            AND tp.page_index = 0)) RESULT ' +
        ' ORDER BY RESULT.order  ';
    if(!bForCnt && Number(pageSize||0) >0) {
        var skipCnt = Number(pageNum||0)*Number(pageSize||0);
        sql += ' LIMIT ' + skipCnt + ',' + pageSize;
    }
    return sql;
}

/**
 * 根据模板集合 ID 获取该集合内的模板列表
 *
 * @param tsId 模板集合唯一标识
 * @param pageNum 页码
 * @param pageSize 页容量
 * @param callback 回调
 *          error: 错误信息
 *          list: [{
 *              designId : 1,
 *              typeL: 1,
 *              thumb: 'http://oss-img',
 *              w : 720,
 *              h : 1280
 *          }]
 * */
ItbTmplSetModel.prototype.getTmplListByTmplSetId = function(tsId, pageNum, pageSize, callback) {
    pool.pool.getConnection(function(getConnectErr, connection) {
        if (getConnectErr) {
            console.log('ItbTmplSetModel.getTmplListByTmplSetId Err: '+getConnectErr);
            return callback(getConnectErr, null);
        }
        var sql = sql_getTmplListByTmplSetId(false, tsId, pageNum, pageSize);
        console.log(sql);
        connection.query(sql, function (error, results) {
            connection.release();
            if(error){
                console.log('ItbTmplSetModel.getTmplListByTmplSetId Err: ' + error);
                return callback(error,null);
            }
            return callback(null, results);
        });
    });
};
/**
 * 根据模板集合 ID 获取该集合内的模板列表的模板总个数
 *
 * @param tsId 模板集合唯一标识
 * @param pageNum 页码
 * @param pageSize 页容量
 * @param callback 回调
 *          error: 错误信息
 *          count: 总数量
 * */
ItbTmplSetModel.prototype.getTmplListByTmplSetIdCnt = function(tsId, pageNum, pageSize, callback) {
    pool.pool.getConnection(function (getConnectErr, connection) {
        if (getConnectErr) {
            console.log('ItbTmplSetModel.getTmplListByTmplSetIdCnt Err: ' + getConnectErr);
            return callback(getConnectErr, null);
        }
        var sql = sql_getTmplListByTmplSetId(true, tsId, null, null);
        console.log(sql);
        connection.query(sql, function (error, results) {
            connection.release();
            if (error || !results || results.length < 1) {
                error = error ? error : '查询失败';
                console.log('ItbTmplSetModel.getTmplListByTmplSetIdCnt Err: ' + error);
                return callback(error, null);
            }
            return callback(null, results[0].count);
        });
    });
};




module.exports = ItbTmplSetModel;